/*
 * @Author: dailin
 * @Date: 2020-12-25 11:40:10
 * @Last Modified by: dailin
 * @Last Modified time: 2020-12-28 11:19:35
 */
const checkRule = {
  // 手机号
  tel: {
    rule: /^1[3456789]\d{9}$/,
    message: '手机号格式不正确',
  },
  // 电话
  phone: {
    rule: /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/,
    message: '电话格式不正确',
  },
  // 只能输入数字
  positiveInteger: {
    rule: /^-?\d+$/g,
    message: '只能输入数字',
  },
  // 密码
  password: {
    rule: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$/,
    message: '密码格式不正确',
  },
  // 正整数, 0
  positiveNumber: {
    rule: /^[0-9]*$/,
    message: '只能输入非负的整数',
  },
  // 正整数
  positiveInt: {
    rule: /^(0|[1-9][0-9]*)$/,
    message: '只能输入正整数',
  },
  // 网络地址
  netAddress: {
    rule: /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/,
    message: '网络地址格式不正确',
  },
  // 价格
  priceReg: {
    rule: /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/,
    message: '格式不正确',
  },
  // 身份证
  idCard: {
    rule: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
    message: '身份证格式不正确',
  },
  // 正小数
  positiveDecimal: {
    rule: /^[0-9]*([.][0-9]+)?$/,
    message: '只能输入正小数',
  },
  // 邮箱
  email: {
    rule: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/,
    message: '邮箱格式不正确',
  },
  // 保留小数点后3位
  keep3DecimalPlaces: {
    rule: /^-?\d+(\.\d{1,3})?$/,
    message: '请保留小数点后3位',
  },
  // 保留小数点后两位
  twoDecimalPlaces: {
    rule: /^\d+(\.\d{0,2})?$/,
    message: '请保留小数点后两位',
  },
  // 中文字母校验
  chineseLetters: {
    rule: /^[\u4E00-\u9FA5A-Za-z]+$/,
    message: '只能输入中文字母',
  },
  // 字母校验
  letters: {
    rule: /^[A-Za-z]+$/,
    message: '只能输入字母',
  },
  // 判断是否为固话
  isTel: {
    rule: /^(400|800)([0-9\\-]{7,10})|(([0-9]{4}|[0-9]{3})(-| )?)?([0-9]{7,8})((-| |转)*([0-9]{1,4}))?$/,
    message: '固话格式不正确',
  },
  // 为空验证
  isEmpty: function (str) {
    return str === null || false || str === '' || str.trim() === '' || str.toLocaleLowerCase().trim() === 'null';
  },
  // 字母校验
  letters: {
    rule: /^[A-Za-z]+$/,
    message: '只能输入字母',
  },
  // 只能输入数字
  onlyNumber: {
    rule: /^\d+(\.\d{0,2})?$/,
    message: '只能输入正数，且最多保留2位小数',
  },

  /**
   * 用于校验表单方法
   * @param key {string} 上述规则的名称
   * @param val {string|number} 需要校验的数据
   * @return {Boolean} 是否通过校验 true通过 false未通过
   */
  check: (key, val) => checkRule[key].rule.test(val),

  /**
   * 用于配合base-form进行验证, 对于验证的地方一般都是输入框
   * @param name 描述信息
   * @return {*}
   */
  formValidate(reg) {
    return {
      pattern: checkRule[reg].rule,
      message: checkRule[reg].message,
      trigger: 'blur',
    };
  },
};
export default checkRule;
export const formValidate = checkRule.formValidate;
